<template>
  <div>
    <upload-excel :on-success="onSuccess" :before-upload="beforeUpload" />
  </div>
</template>

<script>
// 该组件的作用就是获取UploadExcel组件解析的Excel数据，把数据转换为接口需要的格式，然后调用接口，批量导入
import { reqImportEmployee } from '@/api/employees.js'
export default {
  name: 'Import',
  methods: {
    // 用于文件上传前的检测工作:如果该函数返回false,就阻止上传
    beforeUpload (file) {
      // 验证文件类型
      if (file.size / 1024 > 20) {
        this.$message.warning('文件大小不可以超过20K')
        return false
      }
      return true
    },

    // 这里的data是解析Excel的原始数据
    async onSuccess (data) {
      //  这里的data是解析Excel的原始数据
      // console.log(data)
      // 将Excel中获取到的值赋值给translateData
      const result = this.translateData(data.results)
      // console.log(result)
      try {
        const ret = await reqImportEmployee(result)
        if (ret.code === 10000) {
          this.$router.push('/employees')
          this.$message.success('批量导入列表成功')
        } else {
          this.$message.warning(ret.message)
        }
      } catch {
        this.$message.warning('批量导入失败')
      }
    },

    // 将列表转换为后台所需要的数据形式
    translateData (results) {
      // results 是接收到的 data.results中的值
      // results = [{"手机号":15751786628,"姓名":"张飞1","入职日期":43535,"转正日期":43719,"工号":88088},{"手机号":15751786630,"姓名":"关羽2","入职日期":43535,"转正日期":43719,"工号":88089}]
      const userRelations = {
        // 将获取的Excel中的中文属性名和后台所需要的英文属性名对应
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }
      const arr = []
      results.forEach(item => {
        // item:{"手机号":15751786628,"姓名":"张飞1","入职日期":43535,"转正日期":43719,"工号":88088
        const row = {}
        for (const key in item) {
          console.log(key)
          // key 是item 中的每个属性名
          const enKey = userRelations[key]
          // enKey 就是 userRelations 中的每一个 英文属性值
          const value = item[key]
          // value 就是 item 中的 每一个 属性值
          if (['timeOfEntry', 'correctionTime'].includes(enKey)) {
            // 判断  enKey 在不在这个范围内 ['timeOfEntry', 'correctionTime'] ->不为空
            // 这个属性是时间，需要把数字转换为年月日格式
            row[enKey] = this.formatDate(value)
          } else {
            // 其他数据不做处理
            row[enKey] = value
          }
        }
        arr.push(row)
      })
      return arr
    },
    // 将获取到的数字，转换为时间格式
    formatDate (numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }

}

</script>

<style>
</style>
